package com.example.girl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class GirlController {

    @Autowired
    private GirlRepository girlRepository;

    @Autowired
    private GirlService girlService;

    /**
     * 查询全部女孩  （注意：使用 GetMapping）
     * 插件访问时候使用： GET
     * @return
     */
    @GetMapping(value = "/girls")
    public List<Girl> girlList(){
        return girlRepository.findAll();
    }

    /**
     * 创建一个Girl对象 （注意：使用 PostMapping）
     * 插件访问时候使用： POST
     * @param cupSize
     * @param age
     * @return
     */
    @PostMapping(value = "/girls")
    public Girl girlAdd(@RequestParam("cupSize") String cupSize, @RequestParam("age") Integer age){
        Girl girl = new Girl();
        girl.setAge(age);
        girl.setCupSize(cupSize);
       return girlRepository.save(girl);
    }

    /**
     * 根据id 【查询】Girl， 注意：GetMapping中的路径， 还有获取参数值使用 @PathVariable("id")
     * 插件访问时候使用： GET
     * @param id
     * @return
     */
    @GetMapping(value = "/girls/{id}")
    public Girl girlFindOne(@PathVariable("id") Integer id){
        return  girlRepository.findOne(id);
    }

    /**
     * 根据id【更新】Girl：
     * 注意：
     *      1. 更新使用PutMapping；
     *      2. 路径的写法，获取URL中的/ 正斜杠后面的参数，使用 PathVariable
     *      3. 获取通过header或者body 传进来的参数， 使用RequestParam
     *      4. 插件访问时候使用： PUT
     * @param id
     * @param cupSize
     * @param age
     */
    @PutMapping(value = "/girls/{id}")
    public void girlUpdate(@PathVariable("id") Integer id,
                           @RequestParam("cupSize") String cupSize,
                           @RequestParam("age") Integer age){
        Girl girl = new Girl();
        girl.setId(id);
        girl.setCupSize(cupSize);
        girl.setAge(age);
        girlRepository.save(girl);
    }

    /**
     * 根据ID删除
     * 插件访问时候使用： DELETE
     * @param id
     */
    @DeleteMapping(value = "/girls/{id}")
    public void girlDelete(@PathVariable("id") Integer id){
        girlRepository.delete(id);
    }


    @GetMapping(value = "/girls/age/{age}")
    public List<Girl> findByAge(@PathVariable("age") Integer age){
        return girlRepository.findByAge(age);
    }


    @PostMapping(value = "/girls/two")
    public void girlTwo(){
        girlService.insertTwo();
    }

}
